#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include <ctype.h>
#include <stdbool.h>
#include <time.h>

//二叉树定义
typedef struct BinaryTree
{
    struct BinaryTree *left;
    struct BinaryTree *right;
    int val;
}BinaryTree;
//二叉树节点的赋值
BinaryTree* BinaryTreeCreate(int x);
//二叉树前序遍历
void PreOrderTraversal(BinaryTree* root);
//二叉树中序遍历
void InOrderTraversal(BinaryTree* root);
//二叉树后序遍历
void PostOrderTraversal(BinaryTree* root);
//求二叉树的节点个数
int BinaryTreeSize(BinaryTree* root);
//求叶子节点的个数
int TreeLeafsSize(BinaryTree* root);
//求第k层节点个数
int TreeKSize(BinaryTree* root,int k);
//求二叉树的深度
int TreeHigh(BinaryTree* root);
//查找值为x的节点
BinaryTree * BinaryTreeFind(BinaryTree * root, int x);